package com.itheima.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.itheima.dao.OrderSettingDao;
import com.itheima.pojo.OrderSetting;
import com.itheima.service.OrderSettingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author : sunjun
 * @email : sunjun0207@163.com
 * @create 2019/11/10 18:03
 */
@Service(interfaceClass = OrderSettingService.class)
@Transactional

public class OrderSettingServiceImpl implements OrderSettingService {
    //注入orderSettingDao用来操作dao
    @Autowired
    private OrderSettingDao orderSettingDao;

    /*
    预约设置-->根据指定日期修改可预约人数
    1.根据预约时间查询查询是否有记录
    2.添加此日期数据到数据库
    3.修改更改操作
     */
    @Override
    public void editNumberByDate(OrderSetting orderSetting) {
        //1.根据预约时间查询查询是否有记录,
        // 预约设置日期只有在当前天的后面有意义
       Long count =  orderSettingDao.findCountByOrderDate(orderSetting.getOrderDate());//预约设置日期
        if(count > 0){//当前日期已进行预约设置,需要进行修改操作
           orderSettingDao.editNumberByOrderDate(orderSetting);
        }else{//当前日期没有进行预约设置
            orderSettingDao.add(orderSetting);
        }
    }

    /*
     预约设置-->根据日期查询预约设置数据2019-06
      */
    @Override
    public List<Map> findOrderSettingByMonth(String date) {//2019-3
        //取出数据,拼sql语句条件
        String dateBegin = date + "-1";
        String dateEnd = date + "-31";
        //定义hashmap存储sql条件
        Map map = new HashMap();
        map.put("dateBegin", dateBegin);
        map.put("dateEnd",dateEnd);
        //调用orderSettingDao完成查询,将map存到泛型为OrderSetting的list集合
        List<OrderSetting> list = orderSettingDao.findOrderSettingByMonth(map);
        //定义List集合泛型为Map,返回controller
        List<Map> data = new ArrayList<>();
        //遍历list集合
        for (OrderSetting orderSetting : list) {
            //定义一个hashmap存取预约设置数据,前端页面需要的数据需求
            Map orderSettingMap = new HashMap();
            //获取几号,可预约的人数,已预约人数
            orderSettingMap.put("date",orderSetting.getOrderDate().getDate());
            orderSettingMap.put("number",orderSetting.getNumber());
            orderSettingMap.put("reservations",orderSetting.getReservations());
            //封装到data集合,返回
            data.add(orderSettingMap);
        }
        return data;
    }

    /*
       excel文件上传,并解析文件内容到数据库
       批量添加文件内容到数据库
       1.先检查此数据(日期)是否存在
       2.添加此日期数据到数据库
       3.修改更行操作
        */
    @Override
    public void add(List<OrderSetting> list) {
       if(list != null && list.size() > 0){//集合中有数据
           //遍历集合取出数据,一条一条插入
           for (OrderSetting orderSetting : list) {//orderSetting:预约时间,可预约人数
                //1.先检查此数据(日期)是否存在
               Long count = orderSettingDao.findCountByOrderDate(orderSetting.getOrderDate());
               if(count == 0){//没有此日期数据存在
                   //2.添加此日期数据到数据库
                   orderSettingDao.add(orderSetting);
               }else{//此日期数据存在
                   //3.修改更改操作
                   orderSettingDao.editNumberByOrderDate(orderSetting);
               }

           }
       }
    }
}
